/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.foxinline.manager.criar;

import br.com.foxinline.modelo.Anexo;
import br.com.foxinline.modelo.Sugestao;
import br.com.foxinline.servico.AnexoServico;
import br.com.foxinline.servico.SugestaoServico;
import br.com.foxinline.util.Msg;
import br.com.foxinline.utilitarios.ArquivoUtilitario;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.Serializable;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;
import org.primefaces.event.FileUploadEvent;

/**
 *
 * @author laverson
 */
@ViewScoped
@ManagedBean
public class ManagerPesquisarSugestao implements Serializable {

    @EJB
    SugestaoServico sugestaoServico;
    @EJB
    AnexoServico anexoServico;
    private Sugestao sugestaoEditar;
    private Sugestao sugestaoVisualizar;
    private Sugestao sugestaoDelete;
    private List<Sugestao> sugestoes;
    private List<Anexo> anexosRemover;
    private String eSugestao;
    private String vSugestao;
    private ArquivoUtilitario arquivoProtocolo = new ArquivoUtilitario();

    @PostConstruct
    public void init() {
        sugestaoDelete = new Sugestao();
        sugestoes = sugestaoServico.pesquisarTodos();
        anexosRemover = new ArrayList<Anexo>();

        Map<String, String> params = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap();
        eSugestao = params.get("eSugestao");
        vSugestao = params.get("vSugestao");
        paramPost();
    }

    public void paramPost() {
        try {
            if (eSugestao != null) {
                sugestaoEditar = sugestaoServico.pesquisar(Long.parseLong(eSugestao));
            }
            if (vSugestao != null) {
                sugestaoVisualizar = sugestaoServico.pesquisar(Long.parseLong(vSugestao));
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public void atualizar() {
        try {

            if (!anexosRemover.isEmpty()) {
                for (Anexo anexo : anexosRemover) {
                    arquivoProtocolo.excluirArquivo(new File(anexo.getUrl() + anexo.getNome()));
                }
            }

            arquivoProtocolo.gravarAnexos(sugestaoEditar.getAnexos());
            sugestaoServico.atualizar(sugestaoEditar);
            Msg.messagemInfoRedirect(Msg.SuccessFull, "");
        } catch (Exception e) {
            e.printStackTrace();
            Msg.messagemError(Msg.Failure);
        }
    }
    private static int tamanhoMaximoNome = 10;

    public String nomeAnexo(Anexo a) {
        if (a.getNomeExibicao().length() >= tamanhoMaximoNome) {
            return a.getNomeExibicao().substring(0, tamanhoMaximoNome).concat("...");
        }
        return a.getNomeExibicao().replace(".png", "").replace(" ", "_");
    }

    public String nomeAnexoPdf(Anexo a) {
        if (a.getNomeExibicao().length() >= tamanhoMaximoNome) {
            return a.getNomeExibicao().substring(0, tamanhoMaximoNome).concat("...");
        }
        return a.getNomeExibicao().replace(".pdf", "").replace(" ", "_");
    }

    public void handleAnnex(FileUploadEvent event) throws IOException {
        try {
            sugestaoEditar.getAnexos().add(arquivoProtocolo.adicionarArquivo(event));
        } catch (FileNotFoundException ex) {
            Logger.getLogger(ManagerPesquisarSugestao.class.getName()).log(Level.SEVERE, null, ex);
        } catch (SQLException ex) {
            Logger.getLogger(ManagerPesquisarSugestao.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    /**
     * Remove o anexo da lista de anexos do processo que está sendo adicionado e
     * remove o arquivo do diretório que foi gravado
     *
     * @param anexo
     */
    public void removerAnexo(Anexo anexo) {
        try {
            sugestaoEditar.getAnexos().remove(anexo);
            anexosRemover.add(anexo);
        } catch (Exception e) {
            Msg.messagemError(Msg.Failure);
        }
    }

    public void deletar() {
        sugestoes.remove(sugestaoDelete);
        sugestaoServico.remover(sugestaoDelete);
    }

    public Sugestao getSugestaoDelete() {
        return sugestaoDelete;
    }

    public void setSugestaoDelete(Sugestao sugestaoDelete) {
        this.sugestaoDelete = sugestaoDelete;
    }

    public Sugestao getSugestaoEditar() {
        return sugestaoEditar;
    }

    public void setSugestaoEditar(Sugestao sugestaoEditar) {
        this.sugestaoEditar = sugestaoEditar;
    }

    public Sugestao getSugestaoVisualizar() {
        return sugestaoVisualizar;
    }

    public void setSugestaoVisualizar(Sugestao sugestaoVisualizar) {
        this.sugestaoVisualizar = sugestaoVisualizar;
    }

    public List<Sugestao> getSugestoes() {
        return sugestoes;
    }

    public void setSugestoes(List<Sugestao> sugestoes) {
        this.sugestoes = sugestoes;
    }

    public List<Anexo> getAnexosRemover() {
        return anexosRemover;
    }

    public void setAnexosRemover(List<Anexo> anexosRemover) {
        this.anexosRemover = anexosRemover;
    }
}
